#include <iostream>
#include <fstream>
#include <sstream>
using std::cout;
using std::endl;
using std::cin;
using std::istream;
using std::ostream;
using std::ifstream;
using std::ofstream;
using std::istringstream;
using std::ostringstream;
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <string>
#include <map>
// #include <utility>
using std::vector;
using std::map;
using std::unordered_map;
using std::set;
using std::string;
using std::pair;
using std::make_pair;

class Convert
{
public:
    void read_rule(ifstream&& ifs){
        string word;
        string rule;
        while(ifs >> word){
            getline(ifs, rule);
            rule.erase(rule.begin());
            _rule.emplace(make_pair(word, rule));
        }
        ifs.close();
    }
    void read_txt(ifstream&& ifs){
        string line;
        while(getline(ifs, line)){
            cout << replace(line) << endl;
        }
        ifs.close();
    }
    string replace(string& line){
        istringstream iss(line);
        string word;
        string ret;
        while(iss >> word){
            auto ret_it = _rule.find(word);
            if(ret_it == _rule.end()){
                ret = ret + word + ' ' ;
            }else{
                ret = ret + ret_it->second + ' ' ;
            }
        }
        ret.pop_back();
        return ret;
    }
    void show(){
        for(auto& elem : _rule){
            cout << elem.first << "  " << elem.second << endl;
        }
    }
private:
    unordered_map<string, string> _rule;
};
int main()
{
    Convert C;
    C.read_rule(ifstream("map.txt"));
    // C.show();
    C.read_txt(ifstream("file.txt"));
    return 0;
}

// 使用unordered_map/map实现单词转换程序。给定一个string，将它转换为另一个string。程序的输入是两个文件，第一个文件保存的是一些规则，用来转换第二个文件中的文本。
// 每条规则由两部分组成：一个可能出现在输入文件中的单词和一个用来替换它的短语。
// 表达的含义是，每当第一个单词出现在输入中时，我们就将它替换为对应的短语，第二个输入文件包含要转换的文本。（C++ primer 11.3.6）

// 提示：
// 规则文件：map.txt文件，其实就是第一个单词，被后面的一串所替换。
// 待转换文本：file.txt文件，该文件中的单词如果出现在map.txt文件的第一个单词的话，就用map.txt的后面一串替代。
// 结果：最后结果其实就是，将file.txt文件中的并且出现在map.txt中第一个单词转换为map.txt后面的一串。例如：where r u的输出结果就是where are you. r替换为are，u替换为you

// //file.txt
// where r u
// y dont u send me a pic
// k thk l8r

// //map.txt
// brb be right back
// k okay?
// y why
// r are
// u you
// pic picture
// thk thanks!
// l8r later